package cn.b.sky.mes.pp.service;

import java.util.List;
import java.util.Map;
import java.util.Set;

import cn.b.sky.mes.pp.model.ProductionControl;
import cn.b.sky.mes.pp.model.condition.ProductionControlCondition;
import cn.b.sky.mes.pp.model.condition.ProductionControlStatesCondition;
import org.apache.ibatis.annotations.Param;

import cn.b.sky.common.model.BatchJobReport;

/**
 * 
 * <strong>Title : ProductionControlService.java<br></strong>
 * <strong>Package : cn.b.sky.mes.pp.service<br></strong>
 * <strong>Description : </strong>生产管理号业务接口<br> 
 * <strong>Create on : 2016年5月13日 上午10:48:22<br></strong>
 * <p>
 * @author zhaoxin01<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 * <strong>修改历史:</strong><br>
 * 修改人|修改日期|修改描述<br>
 * -------------------------------------------<br>
 * <br>
 * <br>
 */
public interface ProductionControlService {

  /**
   * 
   * <strong>Title : selectProductionControlByCondition<br></strong>
   * <strong>Description : </strong>分页查询生产管理号<br> 
   * <strong>Create on : 2016年5月13日 上午11:11:50<br></strong>
   * <p>
   * @param productionControlCondition
   * @return
   * List<ProductionControl>
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> selectProductionControlByCondition(ProductionControlCondition productionControlCondition);

  /**
   * 
   * <strong>Title : selectProductionControlCount<br></strong>
   * <strong>Description : </strong>查询生产管理号数量<br> 
   * <strong>Create on : 2016年5月13日 上午11:12:42<br></strong>
   * <p>
   * @param productionControlCondition
   * @return
   * int
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int selectProductionControlCount(ProductionControlCondition productionControlCondition);

  /**
   * 
   * <strong>Title : selectProductionControl<br></strong>
   * <strong>Description : </strong>查询生产管理号<br> 
   * <strong>Create on : 2016年5月13日 上午11:14:33<br></strong>
   * <p>
   * @param siteCode
   * @param productionControlNum
   * @return
   * ProductionControl
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  ProductionControl selectProductionControl(String siteCode, String productionControlNum);

  /**
   * 
   * <strong>Title : updateProductionControl<br></strong>
   * <strong>Description : </strong>更新生产管理号<br> 
   * <strong>Create on : 2016年5月13日 下午1:05:11<br></strong>
   * <p>
   * @param productionControl
   * void
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void updateProductionControl(ProductionControl productionControl);

  /**
   * 
   * <strong>Title : deleteProductionControl<br></strong>
   * <strong>Description : </strong> 删除生产管理号<br> 
   * <strong>Create on : 2016年5月13日 下午1:08:57<br></strong>
   * <p>
   * @param siteCode
   * @param productionControlNum
   * BatchJobReport
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  BatchJobReport deleteProductionControl(String siteCode, String productionControlNum);

  /**
  * 
  * <strong>Title : doCloseProductionControl<br></strong>
  * <strong>Description : 强制关闭生产管理号</strong><br> 
  * <strong>Create on : 2016-9-21 上午10:24:02<br></strong>
  * <p>
  * @param siteCode
  * @param productionControlNum
  * @param closeOperationTask 是否级联关闭工序任务，作用是工序任务单关闭的时候调用关闭生产管理号防止重复关闭任务单
  * @return
  * BatchJobReport
  * @throws 
  * @author lidapeng<br>
  * @version <strong>v1.0.0</strong><br>
  * <br>
  * <strong>修改历史:</strong><br>
  * 修改人 | 修改日期 | 修改描述<br>
  * -------------------------------------------<br>
  * <br>
  * <br>
  */
  BatchJobReport doCloseProductionControl(String siteCode, String productionControlNum, Boolean closeOperationTask);

  /**
   * 
   * <strong>Title : doPlaceOrderProductionControl<br></strong>
   * <strong>Description : </strong>投产生产管理号<br> 
   * <strong>Create on : 2016年5月16日 下午4:15:25<br></strong>
   * <p>
   * @param siteCode
   * @param productionControlNum
   * @return
   * BatchJobReport
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  BatchJobReport doPlaceOrderProductionControl(@Param("siteCode") String siteCode,
      @Param("productionControlNum") String productionControlNum);

  /**
   * 
   * <strong>Title : selectProductionControlsByOrderNum<br></strong>
   * <strong>Description : </strong>根据订单编号查询生产管理号列表<br> 
   * <strong>Create on : 2016年5月19日 上午10:26:23<br></strong>
   * <p>
   * @param siteCode
   * @param productionOrderNum
   * @return
   * List<ProductionControl>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> selectProductionControlsByOrderNum(String siteCode, String productionOrderNum);

  /**
   * 
   * <strong>Title : productionControlStatusList<br></strong>
   * <strong>Description : </strong>生产管理号执行状态分析查询(返回Map)<br> 
   * <strong>Create on : 2016-5-20 下午3:16:58<br></strong>
   * <p>
   * @param condition
   * @return
   * Map
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Map productionControlStatusList(ProductionControlStatesCondition condition);

  /**
   * 
   * <strong>Title : selectproductionControlStatusBycondition<br></strong>
   * <strong>Description : </strong>生产管理号执行状态分析查询(返回List)<br> 
   * <strong>Create on : 2016-5-30 上午11:03:48<br></strong>
   * <p>
   * @param status
   * @param condition
   * @return
   * List<ProductionControl>
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> selectproductionControlStatusBycondition(String status,
      ProductionControlStatesCondition condition);

  /**
   * 
   * <strong>Title : SelectProductionControlStatusCountBycondition<br></strong>
   * <strong>Description : </strong>生产管理号执行状态分析查询行数<br> 
   * <strong>Create on : 2016-5-20 下午3:23:41<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int selectProductionControlStatusCountBycondition(ProductionControlStatesCondition condition);

  /**
   * 
   * <strong>Title : selectOrderListForDefectGraph<br></strong>
   * <strong>Description : </strong>检验缺陷图形化查询生产管理号详细列表<br> 
   * <strong>Create on : 2016年5月27日 下午1:45:25<br></strong>
   * <p>
   * @param productionControlCondition
   * @return
   * List<ProductionControl>
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<ProductionControl> selectProductionControlListForDefectGraph(
      ProductionControlCondition productionControlCondition);

  /**
   * 
   * <strong>Title : closeProductionControl<br></strong>
   * <strong>Description : </strong>关闭生产管理号，生产订单或者产品订单使用<br> 
   * <strong>Create on : 2016-6-6 下午3:03:44<br></strong>
   * <p>
   * @param siteCode
   * @param orderNum
   * @param type
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void closeProductionControl(String siteCode, String orderNum, String type);

  /**
   * 
   * <strong>Title : getIssuedProductionOrder<br></strong>
   * <strong>Description : </strong>获取已经下达的生产订单编号<br> 
   * <strong>Create on : 2016年8月1日 下午2:07:47<br></strong>
   * <p>
   * @param siteCode
   * @param orderNums
   * @return
   * Set<String>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public Set<String> getIssuedProductionOrder(String siteCode, String[] orderNums);

  /**
   * 
   * <strong>Title : getProductionControlsByControlNums<br></strong>
   * <strong>Description : </strong>获取生产管理号数据<br> 
   * <strong>Create on : 2016年8月1日 下午1:32:40<br></strong>
   * <p>
   * @param siteCode 
   * @param controlNums 管理号编号数组
   * @return
   * List<ProductionControl>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> getProductionControlsByControlNums(String siteCode, String[] controlNums);

  /**
   * 
   * <strong>Title : insertProductionControl<br></strong>
   * <strong>Description : </strong>保存生产管理号<br> 
   * <strong>Create on : 2016年8月1日 下午2:44:37<br></strong>
   * <p>
   * @param productionControl
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insertProductionControl(ProductionControl productionControl);

  /**
   * 
   * <strong>Title : getVirtualProductionControl<br></strong>
   * <strong>Description : </strong>获取虚拟的订单管理号（生产订单附加部分信息）<br> 
   * <strong>Create on : 2016年8月1日 下午3:23:43<br></strong>
   * <p>
   * @param siteCode
   * @param orderNum
   * @return
   * ProductionControl
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  ProductionControl getVirtualProductionControl(String siteCode, String orderNum);

  /**
   * 
   * <strong>Title : getCreatedControlsByCondition<br></strong>
   * <strong>Description : </strong>获取新建状态的管理号<br> 
   * <strong>Create on : 2016年11月10日 下午1:34:36<br></strong>
   * <p>
   * @param condition
   * @return
   * Page
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<ProductionControl> getCreatedControlsByCondition(ProductionControlCondition condition);

  /**
   * 
   * <strong>Title : getCreatedControlsCountByCondition<br></strong>
   * <strong>Description : </strong>获取新建状态的管理号数量<br> 
   * <strong>Create on : 2016年11月10日 下午1:35:31<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int getCreatedControlsCountByCondition(ProductionControlCondition condition);
}
